जब मैं factory_boy ऑब्जेक्ट्स बनाता हूं, तो ऑब्जेक्ट में प्राथमिक कुंजी नहीं दिखती है और मुझे यकीन नहीं है कि क्यों। यहाँ मेरी मॉडल और कारखाना है:factory_boy ऑब्जेक्ट्स में प्राथमिक कुंजी की कमी लगती है
# models.py
from django.db import models
from django.contrib.auth.models import User
class UserProfile(models.Model):
# UserProfile is a subset table of User. They have a 1:1 relationship.
user = models.ForeignKey(User, unique=True)
gender = models.CharField(max_length=1)
# factories.py
import factory
from django.contrib.auth.models import User
from .models import UserProfile
class UserFactory(factory.Factory):
FACTORY_FOR = User
username = 'jdoe'
class UserProfileFactory(factory.Factory):
FACTORY_FOR = UserProfile
user = factory.lazy_attribute(lambda a: UserFactory())
gender = 'M'
अब संघों पर factory_boy documentation के अनुसार, अगर मैं एक उपयोगकर्ता उदाहरण बनाने, मैं कोई 'आईडी' क्षेत्र मिलना चाहिए। हालांकि, मैं नहीं करता। यह वही है मैं (दुभाषिया में) मिलता है:
>>> from app.factories import UserFactory, UserProfileFactory
>>> user = UserFactory()
>>> user.username # This result is correct
'jdoe'
>>> user.id is None # User should be 'saved' and so this should return False
True
इसी
:
>>> user_profile = UserProfileFactory()
>>> user_profile.gender # This is OK
'M'
>>> user_profile.user # This is OK
<User: jdoe>
>>> user_profile.id is None # Why isn't this False?
True
प्रलेखन इन user.id कहते हैं और user_profile.id आदेशों 'झूठी' के बजाय के बाद से 'ट्रू' लौटना चाहिए मैं फैक्ट्री_बॉय उदाहरणों के निर्माण के रूप में (निर्माण के विरोध में) बना रहा हूं। मुझे यहां क्या समझ नहीं आ रहा है? जब मैं इन उदाहरणों को बनाता हूं तो मुझे 'आईडी' मान क्यों नहीं मिल रहा है? ऐसा लगता है कि एक आईडी प्राप्त करने का एकमात्र तरीका स्पष्ट रूप से मेरे कारखानों में 'आईडी' विशेषता बना रहा है। हालांकि, मुझे यह दस्तावेज में कहीं भी नहीं देखा जाता है, इसलिए मुझे नहीं लगता कि आपको यही करना है।
धन्यवाद।
धन्यवाद,:
एक कारखाने बनाने के लिए और स्पष्ट रूप से डेटाबेस के लिए यह नहीं बचा, का उपयोग करें। मैं उपरोक्त लिंक पर उदाहरण कोड की तुलना में, दूसरों के लाभ के लिए, जोड़ सकता हूं। यदि आप कहते हैं, "FACTORY_FOR = 'myapp.User', आपको त्रुटि मिल जाएगी:" विशेषता त्रुटि: 'str' ऑब्जेक्ट में कोई विशेषता नहीं है 'ऑब्जेक्ट'। "आपको myapp.User के आसपास उद्धरण नहीं देना चाहिए। – William
इस समस्या को था एक साल पहले, इस जवाब के साथ हल किया गया था। इस परियोजना के साथ संघर्ष करने के बाद, अब वापस आया, और मैंने देखा कि मैंने पहले ही आपको +1 कर दिया है। आखिरकार मैं सीखूंगा! –