I want to get data from 2 tables into a form using ModelForm, like this:
fist model:
class Cv(models.Model):
created_by = models.ForeignKey(User, blank=True)
first_name = models.CharField(('first name'), max_length=30, blank=True)
last_name = models.CharField(('last name'), max_length=30, blank=True)
url = models.URLField(verify_exists=True)
picture = models.ImageField(help_text=('Upload an image (max %s kilobytes)' %settings.MAX_PHOTO_UPLOAD_SIZE),upload_to='avatar')
bio = models.CharField(('bio'), max_length=180, blank=True)
expertise= models.ForeignKey(Expertise, blank=True)
date_birth = models.DateField()
second model:
class Expertise(models.Model):
user = models.ForeignKey(User, blank=True)
domain = models.CharField(('domain'), max_length=30, blank=True)
specialisation = models.CharField(('specialization'), max_length=30, blank=True)
degree = models.CharField(('degree'), max_length=30, blank=True)
year_last_degree = models.CharField(('year_last_degree'), max_length=30, blank=True)
lyceum = models.CharField(('lyceum'), max_length=30, blank=True)
faculty = models.CharField(('faculty'), max_length=30, blank=True)
references = models.CharField(('references'), max_length=30, blank=True)
workplace = models.CharField(('workplace'), max_length=30, blank=True)
then i have in forms.py
class CvForm(ModelForm):
class Meta:
model = Cv
fields = ['first_name','last_name','url','picture','bio','date_birth']
class ExpertiseForm(ModelForm):
class Meta:
model = Expertise
fields = ['domain','specialisation']
The point is that i would want to have the both forms into one single form, and a single submit of course. So, i guess i should use a single ModelForm type class. But it doesn't work (if i put the expertise in the CvForm too ).
My form is created automatically from the ModelForm class, that's why i want to make a single class = > a single form.
Help plss,
Thanks a lot
Since there is a foreign key from Expertise to CV, there are potentially multiple expertises for each cv. So you should enable that by using inline formsets.
Related
The three models relevant to this question are:
class MaterialList(models.Model):
org = models.ForeignKey(Organizations, on_delete=models.RESTRICT, blank=True)
Material = models.CharField(max_length=100)
Description = models.CharField(max_length=250, blank=True)
PartType = models.ForeignKey(WhsePartTypes, null=True, on_delete=models.RESTRICT)
Price = models.FloatField(null=True, blank=True)
PriceUnit = models.PositiveIntegerField(null=True, blank=True)
TypicalContainerQty = models.IntegerField(null=True, blank=True)
TypicalPalletQty = models.IntegerField(null=True, blank=True)
Notes = models.CharField(max_length=250, blank=True)
UniqueConstraint('org', 'Material')
class Meta:
ordering = ['org','Material']
class CountSchedule(models.Model):
org = models.ForeignKey(Organizations, on_delete=models.RESTRICT, blank=True)
CountDate = models.DateField(null=False)
Material = models.ForeignKey(MaterialList, on_delete=models.RESTRICT)
Counter = models.CharField(max_length=250, blank=True)
Priority = models.CharField(max_length=50, blank=True)
ReasonScheduled = models.CharField(max_length=250, blank=True)
Notes = models.CharField(max_length=250, blank=True)
UniqueConstraint('org', 'CountDate', 'Material')
class Meta:
ordering = ['org','CountDate', 'Material']
class ActualCounts(models.Model):
org = models.ForeignKey(Organizations, on_delete=models.RESTRICT, blank=False)
CountDate = models.DateField(null=False)
CycCtID = models.CharField(max_length=100, blank=True)
Material = models.ForeignKey(MaterialList, on_delete=models.RESTRICT)
Counter = models.CharField(max_length=250, blank=False, null=False)
LocationOnly = models.BooleanField(blank=True, default=False)
CTD_QTY_Expr = models.CharField(max_length=500, blank=False)
BLDG = models.CharField(max_length=100, blank=True)
LOCATION = models.CharField(max_length=250, blank=True)
PKGID_Desc = models.CharField(max_length=250, blank=True)
TAGQTY = models.CharField(max_length=250, blank=True)
FLAG_PossiblyNotRecieved = models.BooleanField(blank=True, default=False)
FLAG_MovementDuringCount = models.BooleanField(blank=True, default=False)
Notes = models.CharField(max_length = 250, blank=True)
class Meta:
ordering = ['org', 'CountDate', 'Material']
These models arise from a migration from a non-Python system to a Python-Django driven system. Most of the time, I only need the forward relations CountSchedule.Material and ActualCounts.Material. There is one report my bosses L_O_V_E, however. This report joins ActualCounts and CountSchedule where ActualCounts.CountDate=CountSchedule.CountDate and ActualCounts.Material=CountSchedule.Material. (Actually, the report has 3 sections, which boil down to a LEFT JOIN, a RIGHT JOIN and an INNER JOIN. For now, I just need help with any of these as a start).
For the moment, I'm going with raw SQL, but I'd like to know if the ORM has a solution.
Any advice?
I've already tried
M = MaterialList.objects.select_related('actualcounts_set', 'countschedule_set').filter(org=_userorg, actualcounts__CountDate=datestr, countschedule__CountDate=datestr)
which resulted in
Invalid field name(s) given in select_related: 'countschedule_set', 'actualcounts_set'. Choices are: org, PartType
Please I'm trying to implement a SIMPLE messaging function (NOT A REAL TIME CHAT)
But I keep getting this error message I understand what it says or mean but I'm not sure why I am unable to establish this relationship
Please I need help to alternative if I can't do things this way
This is my profile(Engineer) models
class Engineer(AbstractUser):
username = models.CharField(max_length=200, null=True)
email = models.EmailField(unique=True, null=True)
bio = models.TextField()
avatar = models.ImageField(default="profile.png")
country = models.CharField(max_length=200)
years_of_experience = models.PositiveIntegerField(null=True, blank=True)
tech_stack = models.CharField(null=True, blank=True, max_length=300)
inbox = models.ForeignKey(Inbox, null=True, on_delete=models.CASCADE)
USERNAME_FIELD = "email"
REQUIRED_FIELDS = ["username"]
def __str__(self):
return self.username
and this is my Inbox models
class Inbox(models.Model):
sender = models.ForeignKey(Engineer, null=True, on_delete=models.CASCADE, related_name='mail_sender')
receiver = models.ForeignKey(Engineer, null=True, on_delete=models.CASCADE, related_name="mail_receiver")
message = models.CharField(max_length=500)
updated = models.DateTimeField(auto_now=True)
created = models.DateTimeField(auto_now_add=True)
class Meta:
ordering = ["-created"]
def __str__(self):
return self.sender.username
Just make the Engineer import as follows
sender = models.ForeignKey('Engineer', null=True, on_delete=models.CASCADE, related_name='mail_sender')
receiver = models.ForeignKey('Engineer', null=True, on_delete=models.CASCADE, related_name="mail_receiver")
I have this models and the view for user profile.
class Room(models.Model):
admin = models.ForeignKey(User, on_delete=models.SET_NULL, null=True)
topic = models.ForeignKey(Topic, on_delete=models.SET_NULL, null=True)
group_photo = models.ImageField(null=True, upload_to = 'images/', default='avatar.svg')
name = models.CharField(unique=True, max_length=100)
description = models.TextField(null=True, blank=True)
members = models.ManyToManyField(User, related_name='members', blank=True)
created = models.DateTimeField(auto_now_add=True)
views.py
#login_required(login_url= 'login')
def userprofile(request, pk):
user = User.objects.get(username=pk)
#groups = user.room_set.all()
groups = Room.objects.filter(admin=user)
all_groups = Room.objects.filter(members=user)
return render(request, 'base/profile.html', {'user':user, 'groups':groups, 'all_groups':all_groups})
Please explain how _set.all method filter method are doing the same job.
I don't understand where the room is coming from (there is only (Room) model.
explain the mechanism of user.room_set.all line respect to filter;
Following this link and documentation, somehow it still can't save an Object with 2 Foreinkeys.
class Photo(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, null=True) #User.photo_set.all() returns all Photo objects of the photo
photoURL = models.CharField(max_length=256, null=True)
secondPhoto = models.OneToOneField('self', on_delete=models.PROTECT, null=True, blank=True)
timestamp = models.DateTimeField(auto_now_add=True)
description = models.CharField(max_length=1000, null=True)
is_private = models.BooleanField(default=False)
class Clash(models.Model):
win_photo = models.ForeignKey(Photo,on_delete=models.PROTECT, related_name="wins", null=True)
loss_photo = models.ForeignKey(Photo,on_delete=models.PROTECT, related_name="losses", null=True)
is_private = models.BooleanField(default=False) #we will filter those out for user quality calculations
How can i get data from databse(sqllite) into dropdown button and based on selected value retrive all matching values on datagrid or in csv in django
class AnalyzedFile(models.Model):
sha256 = models.CharField(db_column='SHA256', max_length=64, blank=True)
md5 = models.CharField(db_column='MD5', max_length=32, blank=True)
sha1 = models.CharField(db_column='SHA1', max_length=40, blank=True)
filename = models.CharField(db_column='FILENAME', max_length=5000, blank=True)
filelength = models.IntegerField(db_column='FILELENGTH', blank=True, null=True)
filetype = models.CharField(db_column='FILETYPE', max_length=3, blank=True)
fileentropy = models.CharField(db_column='FILEENTROPY', max_length=50, blank=True)
peidsig = models.CharField(db_column='PEIDSIG', max_length=1000, blank=True)
exeinfosig = models.CharField(db_column='EXEINFOSIG', max_length=1000, blank=True)
ssdeepsig = models.CharField(db_column='SSDEEPSIG', max_length=200, blank=True)
digitalsig = models.CharField(db_column='DIGITALSIG', max_length=100, blank=True)
description = models.CharField(db_column='DESCRIPTION', max_length=65000, blank=True) # Field name made lowercase.
analysis = models.CharField(db_column='ANALYSIS', max_length=65000, blank=True)
class Meta:
managed = False
db_table = 'ANALYZED_FILE'